package com.zusmart.core.bean;

import com.zusmart.core.bean.cause.BeanInstanceNotFoundException;

/**
 * Bean定义接口
 * 
 * @author Administrator
 *
 */
public interface BeanDefinition extends BeanDefinitionActivity {

	// 单例Bean,全局唯一
	public static final String SCOPE_SINGLETON = "singleton";
	// 多例Bean,每次获取返回新的实例
	public static final String SCOPE_PROTOTYPE = "prototype";

	/**
	 * @return 返回Bean定义的名称,不可重复
	 */
	public String getBeanName();

	/**
	 * @return 返回Bean的创建方式
	 */
	public BeanDefinitionType getBeanType();

	/**
	 * @return 返回Bean的作用域
	 */
	public String getBeanScope();

	/**
	 * @return 返回Bean的真实类型
	 */
	public Class<?> getBeanClass();

	/**
	 * 
	 * @return 返回当前Bean对应的实例
	 * @throws BeanInstanceNotFoundException
	 *             Bean实例未找到异常
	 */
	public Object getBeanInstance() throws BeanInstanceNotFoundException;

	/**
	 * @return 判断是否为单例Bean
	 */
	public boolean isSingleton();

	/**
	 * @return 判断是否为多例Bean
	 */
	public boolean isPrototype();

	public boolean isClassType();

	public boolean isMethodType();

	public boolean isObjectType();

	/**
	 * 
	 * @param beanType
	 *            目标Bean类型
	 * @return 判断当前Bean对应的类,是否与执行的Bean为同一类或派生类
	 */
	public boolean isAssignable(Class<?> beanType);

	/**
	 * @return 返回Bean对象持有器,可控制scope
	 */
	public BeanInstanceHandler getBeanInstanceHandler();

	/**
	 * @return 返回Bean对象的创建器,可实现proxy
	 */
	public BeanInstanceCreator getBeanInstanceCreator();

	/**
	 * @return 返回Bean对象的解析器
	 */
	public BeanDefinitionResolver getBeanDefinitionResolver();

	/**
	 * @return 返回Bean的注册中心
	 */
	public BeanDefinitionRegistry getBeanDefinitionRegistry();

}